home *** CD-ROM | disk | FTP | other *** search
/ Aminet 30 / Aminet 30 (1999)(Schatztruhe)[!][Apr 1999].iso / Aminet / dev / lang / SmallEiffel.lha / SmallEiffel / lib_std / std_file_read_write.e < prev    next >
Text File  |  1998-12-22  |  2KB  |  118 lines

  1. -- This file is  free  software, which  comes  along  with  SmallEiffel. This
  2. -- software  is  distributed  in the hope that it will be useful, but WITHOUT 
  3. -- ANY  WARRANTY;  without  even  the  implied warranty of MERCHANTABILITY or
  4. -- FITNESS  FOR A PARTICULAR PURPOSE. You can modify it as you want, provided
  5. -- this header is kept unaltered, and a notification of the changes is added.
  6. -- You  are  allowed  to  redistribute  it and sell it, alone or as a part of 
  7. -- another product.
  8. --          Copyright (C) 1994-98 LORIA - UHP - CRIN - INRIA - FRANCE
  9. --            Dominique COLNET and Suzanne COLLIN - colnet@loria.fr 
  10. --                       http://www.loria.fr/SmallEiffel
  11. --
  12. class STD_FILE_READ_WRITE
  13.    --
  14.    -- Originally written by Emmanuel CECCHET --
  15.    --
  16. inherit 
  17.    INPUT_STREAM;
  18.    OUTPUT_STREAM;
  19.    
  20. creation connect_to
  21.    
  22. feature 
  23.    
  24.    path: STRING;
  25.  
  26.    last_character: CHARACTER;
  27.  
  28. feature {NONE}
  29.  
  30.    stream: POINTER;
  31.    
  32. feature
  33.  
  34.    connect_to(new_path: STRING) is
  35.       local
  36.      s, p: POINTER;
  37.       do
  38.      p := new_path.to_external;
  39.      c_inline_c("_s=fopen(_p,%"r+%");");
  40.      if s.is_not_void then
  41.         stream := s;
  42.         path := new_path;
  43.      end;
  44.       end;
  45.  
  46. feature
  47.  
  48.    disconnect is
  49.       require
  50.      is_connected
  51.       do
  52.      fclose(stream);
  53.      path := Void;
  54.       end;
  55.  
  56.    read_character is
  57.       do
  58.      flush_stream(stream);
  59.      last_character := read_byte(stream).to_character;
  60.      push_back_flag := false;
  61.       end;
  62.  
  63.    put_character(c: CHARACTER) is
  64.       do
  65.      flush_stream(stream);
  66.      write_byte(stream,c);
  67.       end;
  68.    
  69.    unread_character is
  70.       local
  71.      p: POINTER;
  72.      c: CHARACTER;
  73.       do
  74.      p := stream;
  75.      c := last_character;
  76.      c_inline_c("ungetc(_c,_p);");
  77.      push_back_flag := true;
  78.       end;
  79.  
  80.    end_of_input: BOOLEAN is
  81.       do
  82.      flush_stream(stream);
  83.      Result := feof(stream)
  84.       end;
  85.  
  86.    is_connected: BOOLEAN is
  87.       do
  88.      Result := path /= Void;
  89.       end;
  90.  
  91.    read_line_in(str: STRING) is
  92.       do
  93.      read_character;
  94.      if last_character /= '%N' then
  95.         from  
  96.            str.extend(last_character);
  97.         until
  98.            end_of_input or else last_character = '%N'
  99.         loop
  100.            read_character;
  101.            str.extend(last_character);
  102.         end;
  103.      end;
  104.       end;
  105.  
  106. feature {NONE}
  107.  
  108.    fclose(stream_pointer : POINTER) is
  109.       external "C_InlineWithoutCurrent"
  110.       end;
  111.  
  112.    feof(stream_ptr: POINTER): BOOLEAN is
  113.       external "SmallEiffel"
  114.       end;
  115.  
  116. end -- STD_FILE_READ_WRITE
  117.  
  118.